package org.springframework.samples.jpetstore.web.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import org.springframework.beans.support.PagedListHolder;
import org.springframework.util.StringUtils;

public class SearchProductsAction extends BaseAction {
  
  public ActionForward execute(ActionMapping mapping, ActionForm form, 
          HttpServletRequest request, 
          HttpServletResponse response) throws Exception {
    String keyword = request.getParameter("keyword");
    if (keyword != null) {
      if (!StringUtils.hasLength(keyword)) {
        request.setAttribute("message", "Please enter a keyword to search for, " +
                "then press the search button.");
        return mapping.findForward("failure");
      }
      
      PagedListHolder productList = new PagedListHolder(getPetStore().
              searchProductList(keyword.toLowerCase()));
      
      productList.setPageSize(4);
      request.getSession().setAttribute("SearchProductsAction_productList",
              productList);
      
      request.setAttribute("productList", productList);
      return mapping.findForward("success");
    } else {
      String page = request.getParameter("page");
      PagedListHolder productList = (PagedListHolder) request.getSession().
              getAttribute("SearchProductsAction_productList");
      
      if (productList == null) {
        request.setAttribute("message", "Your session has timed out. " +
                "Please start over again.");
        
        return mapping.findForward("failure");
      }
      
      if ("next".equals(page)) {
        productList.nextPage();
      } else if ("previous".equals(page)) {
        productList.previousPage();
      }
      request.setAttribute("productList", productList);
      return mapping.findForward("success");
    }
  }
  
}
